package main

import (
	"net"
	"fmt"
	"os"
	"io"
)

func RecvFile(fileName string, conn net.Conn)  {
	//新建文件
	f, err := os.Create(fileName)
	if err != nil {
		fmt.Println(err)
		return
	}

	defer f.Close()

	/**
	这里使用for循环的原因是发送方是分段读取文件的，要向服务器发送多次数据，知道结束。
	 */
	buf := make([]byte, 1024 * 4)
	for {
		n, err1 := conn.Read(buf)
		if err1 != nil {
			if err1 == io.EOF {
				fmt.Println("文件接收完毕")
			}
			fmt.Println(err1)
			return
		}
		f.Write(buf[:n])
	}
}

func main() {
	listen, err := net.Listen("tcp", "127.0.0.1:8000")
	if err != nil {
		fmt.Println(err)
		return
	}

	defer listen.Close()

	buf := make([]byte, 1024)
	//for {
	conn, err1 := listen.Accept()
	if err1 != nil {
		fmt.Println(err1)
		return
	}

	defer conn.Close()

	n, err2 := conn.Read(buf)
	if err2 != nil {
		fmt.Println(err2)
		return
	}


	fmt.Println(string(buf[:n]))

	fileNmae := string(buf[:n])

	conn.Write([]byte("ok"))

	RecvFile(fileNmae, conn)
	//}
}
